package cn.piesat.service.intf;

import cn.piesat.dto.PiesatUserInfoDTO;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import cn.piesat.vo.userInfoConfig.UpdatePasswordParam;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

/**
 * 用户服务层接口定义
 *
 * @author xhl
 */
public interface UserInfoService {

    /**
     * 添加用户
     * @param params
     * @return
     */
    Map<String, String> addUser(JSONObject params);

    /**
     * 搜索功能
     * @param params
     * @param pageable
     * @return
     */
    Map<String, Object> search(JSONObject params, Pageable pageable);

    /**
     * 删除用户信息及角色关联
     * @param id
     */
    void deleteOne(String id);

    /**
     * 锁定或解锁
     * @param params
     */
    void lock(JSONObject params);

    /**
     * 重置密码
     * @param userId 用户ID
     * @return
     */
    String resetPassword(String userId);

    /**
     * 查询用户的详细信息
     * @param userId
     * @return
     */
    Map<String, Object> findByUserId(String userId);

    /**
     * 修改用户信息
     * @param params
     * @return
     */
    Map<String, String> updateUser(JSONObject params);

    /**
     * 获取当前用户的菜单树
     * @param userId
     * @return
     */
    JSONArray getPermissionMenu(String userId);

    /**
     * 查询登录用户的信息
     * @param userId 用户id
     * @return
     */
    Map<String, Object> findLoginUserInfo(String userId);

    /**
     * 根据用户ID和菜单ID获取按钮标识列表
     * @param userId 用户ID
     * @param menuId 菜单ID
     * @return
     */
    List<String> getMenuButtonList(String userId, String menuId);

    /**
     * 修改已经登录用户的密码
     * @param passwordParam
     * @return
     */
    Map<String, String> updatePassword(UpdatePasswordParam passwordParam, String userId);

    /**
     * 查询未锁定的所有用户
     * @return
     */
    List<PiesatUserInfoDTO> findUserList();

    /**
     * 查询今日登录人数 总用户数 最近登录用户
     * @return
     */
    Map<String, Object> getCharts();

    PiesatUserInfoDTO findByEmail(String email);

    PiesatUserInfoDTO findByMobile(String mobile);

    List<String> listAllUserName();
}
